Layout fix · chat surface

Stop the horizontal jump. Lock the chat as the center stage; turn threads and entities into rails.

The chat surface jumps because three columns are competing for layout weight — and because the chat breaks out of the page frame that Home and Reports respect. The fix: put the chat back inside the 72rem page frame, lock the reading column at 760px, and have the rails overlay the stage when opened so the center never reflows. All features stay; the empty space stays — only the layout becomes anchored.

01

Why the eye jumps

Each column reflows on its own schedule. The header, the stream, and the composer end up at different widths, and opening either rail re-stretches the message body. The diagram below shows the difference between the current "three competing columns" and the "center stage + rails" model we want.

Before Three competing columns

Sidebar weight ≈ stream weight ≈ inspector weight. The center column resizes whenever a rail toggles.

  • Header, stream, save bar, composer all use different alignment widths.
  • Opening a rail makes the chat content bigger or smaller — a visible shove.
  • Right rail competes with the answer; reads like a second document.

After Center stage + rails

Stream stays anchored at 800px. Rails collapse to 64px icon strips and overlay before they ever push the stage.

  • Header, save bar, stream, composer share one alignment width.
  • Rails open as peek first. Center only shrinks when both are fully expanded.
  • Outer whitespace stays — now reading as deliberate gutters, not waste.
02

The fix, live

Try the rail states. The center stream and the composer never change width — they share a single 800px lock. Toggle Show grid to see the lock; switch Focus / Balanced / Research to feel how the rails should default per task.

Mode
Left rail
Right rail
Show grid
stage 800px left 280px right 320px
overlay mode · stage stays anchored
O

Orbital Labs · Series B diligence

● fresh ·4 turns ·12 sources ·3 entities ·0 paid calls
Saved to Orbital Labs · diligence · 2 sections · 7 claims · 3 follow-ups
HS
You9:42 AM

Show me the 3 risks I should ask Orbital Labs about in the diligence call. Cite a recent source for each.

N
NodeBench9:42 AM
Researched 4 sources · 3 cached · 1 live · 0.8s

Three risks worth pressing on, in priority order:

1. Concentration in two anchor pilots. Both anchors renew in Q3, and the public ARR hasn't been re-segmented since the seed deck.1 Ask what the post-anchor ARR floor looks like.

2. Founding-team co-investor overlap. Lead candidate is also on the board of — the closest comp.2 Ask about info-share guardrails before term-sheet.

3. p95 latency on the hosted plan. Listed as the only outstanding eval item, but the latest blog post is from January.3 Ask for a fresh number; flag it as a perf enhancement, not a correctness blocker.

memory-first · 0 paid calls so far this session
prototype · move modes / rails to feel the 800px lock — header, stream, save bar, and composer never reflow
03

Layout spec

Concrete numbers to drop into nodebench.css. The reading lock is the most important value — once it's stable, the rest follows.

Widths

Page frame (matches Home / Reports)72rem · ≈ 1152px
Center stage (stream + composer)760px lock
Left rail · collapsed64px
Left rail · peek260px
Left rail · expanded320px
Right rail · collapsed64px
Right rail · peek300px
Right rail · expanded360px
Outer gutters24–40px

Motion

Rail open / close200ms · ease-out-expo
Center anchorno width animation
Rail content fade-inopacity + 4px slide
Stage reflow on rail opennever · rails overlay
Reduced motionno-op transitions

Mode presets

ModeLeftRight
Focuscollapsedcollapsed
Balancedcollapsedpeek
Researchpeekexpanded
04

Interaction rules

These are the small behaviors that keep the layout feeling anchored even as the user works.

  • Wrap the chat surface in nb-shell (72rem) so it visually matches Home and Reports.
  • Default both rails to collapsed icon strips — the conversation is the hero.
  • Open rails as overlays over the stage with a soft scrim, dismissable on outside click.
  • Header, save bar, stream, and composer all align to the same 760px center column — one ruler, no drift.
  • Allow pin on the right rail so it persists across threads when the user wants it.
  • Let the chat surface go full-bleed while Home and Reports stay framed — jarring on tab switch.
  • Default both rails open — the center never gets to feel like the hero.
  • Let the chat width float between 600px and 1100px depending on rail state.
  • Treat the right rail as a second document — keep it to top relationships and one CTA.
  • Use a different alignment width for the header vs the stream vs the composer.
One-sentence brief

We fixed the horizontal jump by putting chat inside the same 72rem page frame as Home and Reports, locking the reading column at 760px, and letting threads and entity context overlay the stage instead of pushing it — preserving every feature, keeping the premium whitespace, and making every surface feel like the same product.